// pages/categoryManage/categoryManage.js
const app = getApp()

Page({
  data: {
    categories: [],
    newCategory: '',
    editCategory: null, // 当前编辑的分类
    loading: true,
    error: false,
    editValue: '' // 编辑输入框的值
  },

  onLoad: function() {
    // 直接加载本地数据
    this.loadLocalCategories();
  },

  onShow: function() {
    // 当页面显示时刷新数据
    this.loadLocalCategories();
  },
  
  // 加载本地分类数据
  loadLocalCategories: function() {
    this.setData({ loading: true, error: false });
    
    try {
      // 格式化本地数据
      const localCategories = app.globalData.categories.map(item => {
        // 计算该分类下有多少配方
        const recipeCount = app.globalData.recipes.filter(
          recipe => recipe.categoryId === item.id.toString()
        ).length;
        
        return {
          _id: item.id.toString(),
          id: item.id,
          name: item.name,
          recipeCount: recipeCount
        };
      });
      
      this.setData({
        categories: localCategories,
        loading: false
      });
    } catch (error) {
      console.error('加载分类数据失败:', error);
      this.setData({ 
        loading: false,
        error: true
      });
    }
  },
  
  // 重试加载
  retryLoad: function() {
    this.loadLocalCategories();
  },

  // 输入框内容变化
  onInputChange: function(e) {
    this.setData({
      newCategory: e.detail.value
    });
  },

  // 编辑框内容变化
  onEditInputChange: function(e) {
    this.setData({
      editValue: e.detail.value
    });
  },

  // 添加分类
  addCategory: function() {
    const categoryName = this.data.newCategory.trim();
    
    if (!categoryName) {
      wx.showToast({
        title: '分类名称不能为空',
        icon: 'none'
      });
      return;
    }

    // 检查是否已存在相同名称的分类（不区分大小写）
    const exists = app.globalData.categories.some(item => 
      item.name.toLowerCase() === categoryName.toLowerCase()
    );
    
    if (exists) {
      wx.showToast({
        title: '已存在相同名称的分类',
        icon: 'none'
      });
      return;
    }

    // 添加到本地数据
    wx.showLoading({ title: '添加中...' });
    
    try {
      // 获取当前最大ID
      let maxId = 0;
      if (app.globalData.categories && app.globalData.categories.length > 0) {
        maxId = Math.max(...app.globalData.categories.map(item => parseInt(item.id) || 0));
      }
      
      // 创建新分类
      const newCategory = {
        id: maxId + 1,
        name: categoryName,
        icon: 'default', // 默认图标
      };
      
      // 确保categories数组已初始化
      if (!app.globalData.categories) {
        app.globalData.categories = [];
      }
      
      // 添加到全局数据
      app.globalData.categories.push(newCategory);
      
      // 保存到本地存储
      app.saveLocalData();
      
      wx.hideLoading();
      wx.showToast({
        title: '添加成功',
        icon: 'success'
      });
      
      this.setData({ newCategory: '' });
      this.loadLocalCategories();
    } catch (error) {
      console.error('添加分类失败:', error);
      wx.hideLoading();
      wx.showToast({
        title: '添加失败，请重试',
        icon: 'none'
      });
    }
  },

  // 进入编辑模式
  onEditTap: function(e) {
    const { id, name } = e.currentTarget.dataset;
    this.setData({
      editCategory: id,
      editValue: name
    });
  },

  // 取消编辑
  cancelEdit: function() {
    this.setData({
      editCategory: null,
      editValue: ''
    });
  },

  // 确认编辑
  confirmEdit: function(e) {
    const { id } = e.currentTarget.dataset;
    const newName = this.data.editValue.trim();
    
    if (!newName) {
      wx.showToast({
        title: '分类名称不能为空',
        icon: 'none'
      });
      return;
    }

    // 检查是否与其他分类重名（不区分大小写）
    const exists = app.globalData.categories.some(item => 
      item.id.toString() !== id && 
      item.name.toLowerCase() === newName.toLowerCase()
    );
    
    if (exists) {
      wx.showToast({
        title: '已存在相同名称的分类',
        icon: 'none'
      });
      return;
    }

    wx.showLoading({ title: '更新中...' });
    
    try {
      // 更新本地数据
      const categoryIndex = app.globalData.categories.findIndex(item => 
        item.id.toString() === id
      );
      
      if (categoryIndex !== -1) {
        app.globalData.categories[categoryIndex].name = newName;
        
        // 同时更新相关的配方分类名称
        app.globalData.recipes.forEach(recipe => {
          if (recipe.categoryId === id) {
            recipe.category = newName;
          }
        });
        
        // 保存到本地存储
        app.saveLocalData();
        
        wx.hideLoading();
        wx.showToast({
          title: '更新成功',
          icon: 'success'
        });
        
        this.setData({
          editCategory: null,
          editValue: ''
        });
        
        this.loadLocalCategories();
      } else {
        throw new Error('未找到要编辑的分类');
      }
    } catch (error) {
      console.error('更新分类失败:', error);
      wx.hideLoading();
      wx.showToast({
        title: '更新失败，请重试',
        icon: 'none'
      });
    }
  },

  // 删除分类
  onDeleteTap: function(e) {
    const { id, name, recipeCount } = e.currentTarget.dataset;
    
    // 如果该分类下有食谱，则提示不能删除
    if (recipeCount > 0) {
      wx.showToast({
        title: '该分类下有食谱，不能删除',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '确认删除',
      content: `确定要删除"${name}"分类吗？`,
      success: res => {
        if (res.confirm) {
          wx.showLoading({ title: '删除中...' });
          
          try {
            // 从本地数据删除
            const categoryIndex = app.globalData.categories.findIndex(item => 
              item.id.toString() === id
            );
            
            if (categoryIndex !== -1) {
              app.globalData.categories.splice(categoryIndex, 1);
              
              // 保存到本地存储
              app.saveLocalData();
              
              wx.hideLoading();
              wx.showToast({
                title: '删除成功',
                icon: 'success'
              });
              
              this.loadLocalCategories();
            } else {
              throw new Error('未找到要删除的分类');
            }
          } catch (error) {
            console.error('删除分类失败:', error);
            wx.hideLoading();
            wx.showToast({
              title: '删除失败，请重试',
              icon: 'none'
            });
          }
        }
      }
    });
  },
  
  // 下拉刷新
  onPullDownRefresh: function() {
    this.loadLocalCategories();
    wx.stopPullDownRefresh();
  }
}); 